package chalmersbot;
import chalmersbot.Absyn.*;
/** BNFC-Generated Composition Visitor
*/

public class ComposVisitor<A> implements
  chalmersbot.Absyn.Sentence.Visitor<chalmersbot.Absyn.Sentence,A>,
  chalmersbot.Absyn.IPhrase.Visitor<chalmersbot.Absyn.IPhrase,A>,
  chalmersbot.Absyn.QPhrase.Visitor<chalmersbot.Absyn.QPhrase,A>,
  chalmersbot.Absyn.Phrase.Visitor<chalmersbot.Absyn.Phrase,A>,
  chalmersbot.Absyn.QWInW.Visitor<chalmersbot.Absyn.QWInW,A>,
  chalmersbot.Absyn.QWHow.Visitor<chalmersbot.Absyn.QWHow,A>,
  chalmersbot.Absyn.QWord.Visitor<chalmersbot.Absyn.QWord,A>,
  chalmersbot.Absyn.AuxVerb.Visitor<chalmersbot.Absyn.AuxVerb,A>,
  chalmersbot.Absyn.IsVrb.Visitor<chalmersbot.Absyn.IsVrb,A>,
  chalmersbot.Absyn.Vrb.Visitor<chalmersbot.Absyn.Vrb,A>,
  chalmersbot.Absyn.ToWrd.Visitor<chalmersbot.Absyn.ToWrd,A>,
  chalmersbot.Absyn.GoingWrd.Visitor<chalmersbot.Absyn.GoingWrd,A>,
  chalmersbot.Absyn.Verb.Visitor<chalmersbot.Absyn.Verb,A>,
  chalmersbot.Absyn.VerbWord.Visitor<chalmersbot.Absyn.VerbWord,A>,
  chalmersbot.Absyn.InWrd.Visitor<chalmersbot.Absyn.InWrd,A>,
  chalmersbot.Absyn.Preposition.Visitor<chalmersbot.Absyn.Preposition,A>,
  chalmersbot.Absyn.NumberRule.Visitor<chalmersbot.Absyn.NumberRule,A>,
  chalmersbot.Absyn.Credit.Visitor<chalmersbot.Absyn.Credit,A>,
  chalmersbot.Absyn.CreditWrd.Visitor<chalmersbot.Absyn.CreditWrd,A>,
  chalmersbot.Absyn.Ects.Visitor<chalmersbot.Absyn.Ects,A>,
  chalmersbot.Absyn.CreditNr.Visitor<chalmersbot.Absyn.CreditNr,A>,
  chalmersbot.Absyn.Adjective.Visitor<chalmersbot.Absyn.Adjective,A>,
  chalmersbot.Absyn.ManyWrd.Visitor<chalmersbot.Absyn.ManyWrd,A>,
  chalmersbot.Absyn.SpecialWordToken.Visitor<chalmersbot.Absyn.SpecialWordToken,A>,
  chalmersbot.Absyn.NameRule.Visitor<chalmersbot.Absyn.NameRule,A>,
  chalmersbot.Absyn.Subject.Visitor<chalmersbot.Absyn.Subject,A>,
  chalmersbot.Absyn.SubjectLst.Visitor<chalmersbot.Absyn.SubjectLst,A>,
  chalmersbot.Absyn.SubjectWrd.Visitor<chalmersbot.Absyn.SubjectWrd,A>
{
/* Sentence */
    public Sentence visit(chalmersbot.Absyn.QSentence p, A arg)
    {
      QPhrase qphrase_ = p.qphrase_.accept(this, arg);

      return new chalmersbot.Absyn.QSentence(qphrase_);
    }
    public Sentence visit(chalmersbot.Absyn.ISentenceD p, A arg)
    {
      IPhrase iphrase_ = p.iphrase_.accept(this, arg);

      return new chalmersbot.Absyn.ISentenceD(iphrase_);
    }
    public Sentence visit(chalmersbot.Absyn.ISentence p, A arg)
    {
      IPhrase iphrase_ = p.iphrase_.accept(this, arg);

      return new chalmersbot.Absyn.ISentence(iphrase_);
    }

/* IPhrase */
    public IPhrase visit(chalmersbot.Absyn.ISubNr p, A arg)
    {
      NumberRule numberrule_ = p.numberrule_.accept(this, arg);

      return new chalmersbot.Absyn.ISubNr(numberrule_);
    }
    public IPhrase visit(chalmersbot.Absyn.ISub p, A arg)
    {
      Subject subject_ = p.subject_.accept(this, arg);

      return new chalmersbot.Absyn.ISub(subject_);
    }
    public IPhrase visit(chalmersbot.Absyn.ISubIsSub p, A arg)
    {
      Subject subject_1 = p.subject_1.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.ISubIsSub(subject_1, isvrb_, subject_2);
    }

/* QPhrase */
    public QPhrase visit(chalmersbot.Absyn.QPhraseSimple p, A arg)
    {
      Phrase phrase_ = p.phrase_.accept(this, arg);

      return new chalmersbot.Absyn.QPhraseSimple(phrase_);
    }

/* Phrase */
    public Phrase visit(chalmersbot.Absyn.QYNVerbSubVerb p, A arg)
    {
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);

      return new chalmersbot.Absyn.QYNVerbSubVerb(verb_1, subject_, verb_2);
    }
    public Phrase visit(chalmersbot.Absyn.QYNVerbSubVerbSub p, A arg)
    {
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QYNVerbSubVerbSub(verb_1, subject_1, verb_2, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QYNIsSub p, A arg)
    {
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);

      return new chalmersbot.Absyn.QYNIsSub(isvrb_, subject_);
    }
    public Phrase visit(chalmersbot.Absyn.QYNIsSubVerbSub p, A arg)
    {
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QYNIsSubVerbSub(isvrb_, subject_1, verb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QWordIsSub p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);

      return new chalmersbot.Absyn.QWordIsSub(qword_, isvrb_, subject_);
    }
    public Phrase visit(chalmersbot.Absyn.QWordIsSubVerb p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);

      return new chalmersbot.Absyn.QWordIsSubVerb(qword_, isvrb_, subject_, verb_);
    }
    public Phrase visit(chalmersbot.Absyn.QWordIsSubVerbSub p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QWordIsSubVerbSub(qword_, isvrb_, subject_1, verb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QWordSubVerb p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);

      return new chalmersbot.Absyn.QWordSubVerb(qword_, subject_, verb_);
    }
    public Phrase visit(chalmersbot.Absyn.QWordSubVerbSub p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QWordSubVerbSub(qword_, subject_1, verb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QWordSubIsSub p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QWordSubIsSub(qword_, subject_1, isvrb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QWordSubIsSubVerb p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);

      return new chalmersbot.Absyn.QWordSubIsSubVerb(qword_, subject_1, isvrb_, subject_2, verb_);
    }
    public Phrase visit(chalmersbot.Absyn.QWordVerbSub p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);

      return new chalmersbot.Absyn.QWordVerbSub(qword_, verb_, subject_);
    }
    public Phrase visit(chalmersbot.Absyn.QWordVerbSubVerb p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_ = p.subject_.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);

      return new chalmersbot.Absyn.QWordVerbSubVerb(qword_, verb_1, subject_, verb_2);
    }
    public Phrase visit(chalmersbot.Absyn.QWordVerbSubVerbSub p, A arg)
    {
      QWord qword_ = p.qword_.accept(this, arg);
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QWordVerbSubVerbSub(qword_, verb_1, subject_1, verb_2, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QInWhichSubIsSub p, A arg)
    {
      QWInW qwinw_ = p.qwinw_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QInWhichSubIsSub(qwinw_, subject_1, isvrb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QInWhichSubIsSubVerb p, A arg)
    {
      QWInW qwinw_ = p.qwinw_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);

      return new chalmersbot.Absyn.QInWhichSubIsSubVerb(qwinw_, subject_1, isvrb_, subject_2, verb_);
    }
    public Phrase visit(chalmersbot.Absyn.QInWhichSubIsSubVerbSub p, A arg)
    {
      QWInW qwinw_ = p.qwinw_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_3 = p.subject_3.accept(this, arg);

      return new chalmersbot.Absyn.QInWhichSubIsSubVerbSub(qwinw_, subject_1, isvrb_, subject_2, verb_, subject_3);
    }
    public Phrase visit(chalmersbot.Absyn.QInWhichSubVerbSub p, A arg)
    {
      QWInW qwinw_ = p.qwinw_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QInWhichSubVerbSub(qwinw_, subject_1, verb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QInWhichSubVerbSubVerb p, A arg)
    {
      QWInW qwinw_ = p.qwinw_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);

      return new chalmersbot.Absyn.QInWhichSubVerbSubVerb(qwinw_, subject_1, verb_1, subject_2, verb_2);
    }
    public Phrase visit(chalmersbot.Absyn.QInWhichSubVerbSubVerbSub p, A arg)
    {
      QWInW qwinw_ = p.qwinw_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);
      Subject subject_3 = p.subject_3.accept(this, arg);

      return new chalmersbot.Absyn.QInWhichSubVerbSubVerbSub(qwinw_, subject_1, verb_1, subject_2, verb_2, subject_3);
    }
    public Phrase visit(chalmersbot.Absyn.QHowManySubVerbSub p, A arg)
    {
      QWHow qwhow_ = p.qwhow_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_ = p.verb_.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);

      return new chalmersbot.Absyn.QHowManySubVerbSub(qwhow_, subject_1, verb_, subject_2);
    }
    public Phrase visit(chalmersbot.Absyn.QHowManySubVerbSubVerb p, A arg)
    {
      QWHow qwhow_ = p.qwhow_.accept(this, arg);
      Subject subject_1 = p.subject_1.accept(this, arg);
      Verb verb_1 = p.verb_1.accept(this, arg);
      Subject subject_2 = p.subject_2.accept(this, arg);
      Verb verb_2 = p.verb_2.accept(this, arg);

      return new chalmersbot.Absyn.QHowManySubVerbSubVerb(qwhow_, subject_1, verb_1, subject_2, verb_2);
    }

/* QWInW */
    public QWInW visit(chalmersbot.Absyn.QWInW_1 p, A arg)
    {
      InWrd inwrd_ = p.inwrd_.accept(this, arg);
      String qwhichtoken_ = p.qwhichtoken_;

      return new chalmersbot.Absyn.QWInW_1(inwrd_, qwhichtoken_);
    }
    public QWInW visit(chalmersbot.Absyn.QWInW_2 p, A arg)
    {
      InWrd inwrd_ = p.inwrd_.accept(this, arg);
      String qwhattoken_ = p.qwhattoken_;

      return new chalmersbot.Absyn.QWInW_2(inwrd_, qwhattoken_);
    }

/* QWHow */
    public QWHow visit(chalmersbot.Absyn.QWHowMany p, A arg)
    {
      String qhowtoken_ = p.qhowtoken_;
      ManyWrd manywrd_ = p.manywrd_.accept(this, arg);

      return new chalmersbot.Absyn.QWHowMany(qhowtoken_, manywrd_);
    }

/* QWord */
    public QWord visit(chalmersbot.Absyn.QWordQWordToken p, A arg)
    {
      String qwordtoken_ = p.qwordtoken_;

      return new chalmersbot.Absyn.QWordQWordToken(qwordtoken_);
    }
    public QWord visit(chalmersbot.Absyn.QWordQWhichToken p, A arg)
    {
      String qwhichtoken_ = p.qwhichtoken_;

      return new chalmersbot.Absyn.QWordQWhichToken(qwhichtoken_);
    }
    public QWord visit(chalmersbot.Absyn.QWordQHowToken p, A arg)
    {
      String qhowtoken_ = p.qhowtoken_;

      return new chalmersbot.Absyn.QWordQHowToken(qhowtoken_);
    }
    public QWord visit(chalmersbot.Absyn.QWordQWhatToken p, A arg)
    {
      String qwhattoken_ = p.qwhattoken_;

      return new chalmersbot.Absyn.QWordQWhatToken(qwhattoken_);
    }

/* AuxVerb */
    public AuxVerb visit(chalmersbot.Absyn.AuxiliaryVerb p, A arg)
    {
      String auxiliarytoken_ = p.auxiliarytoken_;

      return new chalmersbot.Absyn.AuxiliaryVerb(auxiliarytoken_);
    }

/* IsVrb */
    public IsVrb visit(chalmersbot.Absyn.IsVerb p, A arg)
    {
      String istoken_ = p.istoken_;

      return new chalmersbot.Absyn.IsVerb(istoken_);
    }

/* Vrb */
    public Vrb visit(chalmersbot.Absyn.RegularVerb p, A arg)
    {
      String verbtoken_ = p.verbtoken_;

      return new chalmersbot.Absyn.RegularVerb(verbtoken_);
    }

/* ToWrd */
    public ToWrd visit(chalmersbot.Absyn.ToWord p, A arg)
    {
      String totoken_ = p.totoken_;

      return new chalmersbot.Absyn.ToWord(totoken_);
    }

/* GoingWrd */
    public GoingWrd visit(chalmersbot.Absyn.GoingWord p, A arg)
    {
      String goingtoken_ = p.goingtoken_;

      return new chalmersbot.Absyn.GoingWord(goingtoken_);
    }

/* Verb */
    public Verb visit(chalmersbot.Absyn.VerbBasic p, A arg)
    {
      VerbWord verbword_ = p.verbword_.accept(this, arg);

      return new chalmersbot.Absyn.VerbBasic(verbword_);
    }
    public Verb visit(chalmersbot.Absyn.VerbIsVerb p, A arg)
    {
      IsVrb isvrb_ = p.isvrb_.accept(this, arg);
      Vrb vrb_ = p.vrb_.accept(this, arg);

      return new chalmersbot.Absyn.VerbIsVerb(isvrb_, vrb_);
    }
    public Verb visit(chalmersbot.Absyn.VerbGointTo p, A arg)
    {
      GoingWrd goingwrd_ = p.goingwrd_.accept(this, arg);
      ToWrd towrd_ = p.towrd_.accept(this, arg);
      VerbWord verbword_ = p.verbword_.accept(this, arg);

      return new chalmersbot.Absyn.VerbGointTo(goingwrd_, towrd_, verbword_);
    }
    public Verb visit(chalmersbot.Absyn.VerbGoing p, A arg)
    {
      String goingtoken_ = p.goingtoken_;

      return new chalmersbot.Absyn.VerbGoing(goingtoken_);
    }
    public Verb visit(chalmersbot.Absyn.VerbTo p, A arg)
    {
      String totoken_ = p.totoken_;

      return new chalmersbot.Absyn.VerbTo(totoken_);
    }

/* VerbWord */
    public VerbWord visit(chalmersbot.Absyn.VerbWordVerb p, A arg)
    {
      Vrb vrb_ = p.vrb_.accept(this, arg);

      return new chalmersbot.Absyn.VerbWordVerb(vrb_);
    }
    public VerbWord visit(chalmersbot.Absyn.VerbWordAux p, A arg)
    {
      AuxVerb auxverb_ = p.auxverb_.accept(this, arg);

      return new chalmersbot.Absyn.VerbWordAux(auxverb_);
    }
    public VerbWord visit(chalmersbot.Absyn.VerbWordAuxVerb p, A arg)
    {
      AuxVerb auxverb_ = p.auxverb_.accept(this, arg);
      Vrb vrb_ = p.vrb_.accept(this, arg);

      return new chalmersbot.Absyn.VerbWordAuxVerb(auxverb_, vrb_);
    }

/* InWrd */
    public InWrd visit(chalmersbot.Absyn.InWord p, A arg)
    {
      String intoken_ = p.intoken_;

      return new chalmersbot.Absyn.InWord(intoken_);
    }

/* Preposition */
    public Preposition visit(chalmersbot.Absyn.Prepositions p, A arg)
    {
      InWrd inwrd_ = p.inwrd_.accept(this, arg);

      return new chalmersbot.Absyn.Prepositions(inwrd_);
    }
    public Preposition visit(chalmersbot.Absyn.PrepositionsTok p, A arg)
    {
      String prepositiontoken_ = p.prepositiontoken_;

      return new chalmersbot.Absyn.PrepositionsTok(prepositiontoken_);
    }

/* NumberRule */
    public NumberRule visit(chalmersbot.Absyn.NumberRuleNumberDigitToken p, A arg)
    {
      String numberdigittoken_ = p.numberdigittoken_;

      return new chalmersbot.Absyn.NumberRuleNumberDigitToken(numberdigittoken_);
    }
    public NumberRule visit(chalmersbot.Absyn.NumberRuleNumberTextToken p, A arg)
    {
      String numbertexttoken_ = p.numbertexttoken_;

      return new chalmersbot.Absyn.NumberRuleNumberTextToken(numbertexttoken_);
    }

/* Credit */
    public Credit visit(chalmersbot.Absyn.CreditNrEC p, A arg)
    {
      CreditNr creditnr_ = p.creditnr_.accept(this, arg);
      Ects ects_ = p.ects_.accept(this, arg);
      CreditWrd creditwrd_ = p.creditwrd_.accept(this, arg);

      return new chalmersbot.Absyn.CreditNrEC(creditnr_, ects_, creditwrd_);
    }
    public Credit visit(chalmersbot.Absyn.CreditNrE p, A arg)
    {
      CreditNr creditnr_ = p.creditnr_.accept(this, arg);
      Ects ects_ = p.ects_.accept(this, arg);

      return new chalmersbot.Absyn.CreditNrE(creditnr_, ects_);
    }
    public Credit visit(chalmersbot.Absyn.CreditNrC p, A arg)
    {
      CreditNr creditnr_ = p.creditnr_.accept(this, arg);
      CreditWrd creditwrd_ = p.creditwrd_.accept(this, arg);

      return new chalmersbot.Absyn.CreditNrC(creditnr_, creditwrd_);
    }
    public Credit visit(chalmersbot.Absyn.CreditE p, A arg)
    {
      Ects ects_ = p.ects_.accept(this, arg);

      return new chalmersbot.Absyn.CreditE(ects_);
    }
    public Credit visit(chalmersbot.Absyn.CreditEC p, A arg)
    {
      Ects ects_ = p.ects_.accept(this, arg);
      CreditWrd creditwrd_ = p.creditwrd_.accept(this, arg);

      return new chalmersbot.Absyn.CreditEC(ects_, creditwrd_);
    }
    public Credit visit(chalmersbot.Absyn.CreditC p, A arg)
    {
      CreditWrd creditwrd_ = p.creditwrd_.accept(this, arg);

      return new chalmersbot.Absyn.CreditC(creditwrd_);
    }

/* CreditWrd */
    public CreditWrd visit(chalmersbot.Absyn.CreditWord p, A arg)
    {
      String credittoken_ = p.credittoken_;

      return new chalmersbot.Absyn.CreditWord(credittoken_);
    }

/* Ects */
    public Ects visit(chalmersbot.Absyn.EctsWord p, A arg)
    {
      String ectstoken_ = p.ectstoken_;

      return new chalmersbot.Absyn.EctsWord(ectstoken_);
    }

/* CreditNr */
    public CreditNr visit(chalmersbot.Absyn.CreditNrCreditNrToken p, A arg)
    {
      String creditnrtoken_ = p.creditnrtoken_;

      return new chalmersbot.Absyn.CreditNrCreditNrToken(creditnrtoken_);
    }
    public CreditNr visit(chalmersbot.Absyn.CreditNrNumberDigitToken p, A arg)
    {
      String numberdigittoken_ = p.numberdigittoken_;

      return new chalmersbot.Absyn.CreditNrNumberDigitToken(numberdigittoken_);
    }

/* Adjective */
    public Adjective visit(chalmersbot.Absyn.AdjectiveAdjectivesToken p, A arg)
    {
      String adjectivestoken_ = p.adjectivestoken_;

      return new chalmersbot.Absyn.AdjectiveAdjectivesToken(adjectivestoken_);
    }
    public Adjective visit(chalmersbot.Absyn.AdjectiveManyWrd p, A arg)
    {
      ManyWrd manywrd_ = p.manywrd_.accept(this, arg);

      return new chalmersbot.Absyn.AdjectiveManyWrd(manywrd_);
    }

/* ManyWrd */
    public ManyWrd visit(chalmersbot.Absyn.ManyWord p, A arg)
    {
      String manytoken_ = p.manytoken_;

      return new chalmersbot.Absyn.ManyWord(manytoken_);
    }

/* SpecialWordToken */
    public SpecialWordToken visit(chalmersbot.Absyn.SpecialWordTokenSNounSToken p, A arg)
    {
      String snounstoken_ = p.snounstoken_;

      return new chalmersbot.Absyn.SpecialWordTokenSNounSToken(snounstoken_);
    }
    public SpecialWordToken visit(chalmersbot.Absyn.SpecialWordTokenSNounEsToken p, A arg)
    {
      String snounestoken_ = p.snounestoken_;

      return new chalmersbot.Absyn.SpecialWordTokenSNounEsToken(snounestoken_);
    }

/* NameRule */
    public NameRule visit(chalmersbot.Absyn.NameRuleNameToken p, A arg)
    {
      String nametoken_ = p.nametoken_;

      return new chalmersbot.Absyn.NameRuleNameToken(nametoken_);
    }

/* Subject */
    public Subject visit(chalmersbot.Absyn.SubjectToList p, A arg)
    {
      SubjectLst subjectlst_ = p.subjectlst_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectToList(subjectlst_);
    }

/* SubjectLst */
    public SubjectLst visit(chalmersbot.Absyn.SubjectList p, A arg)
    {
      SubjectLst subjectlst_ = p.subjectlst_.accept(this, arg);
      SubjectWrd subjectwrd_ = p.subjectwrd_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectList(subjectlst_, subjectwrd_);
    }
    public SubjectLst visit(chalmersbot.Absyn.SubjectListElement p, A arg)
    {
      SubjectWrd subjectwrd_ = p.subjectwrd_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectListElement(subjectwrd_);
    }

/* SubjectWrd */
    public SubjectWrd visit(chalmersbot.Absyn.SubjectBasic p, A arg)
    {
      String subjecttoken_ = p.subjecttoken_;

      return new chalmersbot.Absyn.SubjectBasic(subjecttoken_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectSpecialWord p, A arg)
    {
      SpecialWordToken specialwordtoken_ = p.specialwordtoken_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectSpecialWord(specialwordtoken_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectDeterminant p, A arg)
    {
      String determinanttoken_ = p.determinanttoken_;

      return new chalmersbot.Absyn.SubjectDeterminant(determinanttoken_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectSmallWord p, A arg)
    {
      String smallwordtoken_ = p.smallwordtoken_;

      return new chalmersbot.Absyn.SubjectSmallWord(smallwordtoken_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectPronoun p, A arg)
    {
      String pronountoken_ = p.pronountoken_;

      return new chalmersbot.Absyn.SubjectPronoun(pronountoken_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectPeriod p, A arg)
    {
      String periodtoken_ = p.periodtoken_;

      return new chalmersbot.Absyn.SubjectPeriod(periodtoken_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectPeriodNr p, A arg)
    {
      String periodtoken_ = p.periodtoken_;
      NumberRule numberrule_ = p.numberrule_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectPeriodNr(periodtoken_, numberrule_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectName p, A arg)
    {
      NameRule namerule_ = p.namerule_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectName(namerule_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectNumber p, A arg)
    {
      Credit credit_ = p.credit_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectNumber(credit_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectPreposition p, A arg)
    {
      Preposition preposition_ = p.preposition_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectPreposition(preposition_);
    }
    public SubjectWrd visit(chalmersbot.Absyn.SubjectAdjective p, A arg)
    {
      Adjective adjective_ = p.adjective_.accept(this, arg);

      return new chalmersbot.Absyn.SubjectAdjective(adjective_);
    }

}